import type { FunctionalComponent } from 'vue';
import type { RouteLocation } from 'vue-router';

export interface DefaultContext {
	Component: FunctionalComponent & { type: Recordable };
	route: RouteLocation;
}

export function getTransitionName({
	route,
	openCache,
	cacheTabs,
	enableTransition,
	def,
}: Pick<DefaultContext, 'route'> & {
	enableTransition: boolean;
	openCache: boolean;
	def: string;
	cacheTabs: string[];
}): string | undefined {
	if (!enableTransition) {
		return undefined;
	}

	const isInCache = cacheTabs.includes(route.name as string);
	const transitionName = 'fade-slide';
	let name: string | undefined = transitionName;

	if (openCache) {
		name = isInCache && route.meta.loaded ? transitionName : undefined;
	}
	return name || (route.meta.transitionName as string) || def;
}
